#include "animal.h"
#include <string.h>
#include <stdlib.h>


//相当于工厂模式里面的creat根据字符串进行查找或者生成合适的派生类
struct animal * findAnimal(struct animal * head,char buf[128])//查找链表中的功能
{
    struct animal * lost;
    lost = head;

    if(lost == NULL)//如果链表里面没有功能，就退出程序
    {
        printf("no find....\n");
        exit(-1);
    }
    else
    {
        while(lost != NULL)
        {
            printf("name:%s\n",lost->name);
            if(strcmp(lost->name,buf)==0)//如果这个功能和我们输入的关键词一样
            {
                return lost;//就返回这个功能
            }
            lost = lost->next;//如果第一次没找到功能，我们就遍历下一个节点，在找一次
        }

        return NULL;

    }
}


void main()
{
    char buf[128];
    //head就相当于是派生类工厂
    struct animal * head = NULL;
    struct animal * lost = NULL;

    //不断的丰富工厂类相当于
    head = PutLink_cat(head);//创建链表
    head = PutLink_dog(head);
    head = PutLinkfish(head);

    while(1)
    {
        printf("plase input you find animal:");
        scanf("%s",buf);

        //取出工厂类中符合的子类
        lost = findAnimal(head,buf);//查找功能，返回功能的地址
        if(lost != NULL)//如果有这个功能，就打开对应的功能
        {
            printf("animal age = %d\n",lost->age);
            lost->eat();
        }
        else
        {
            printf("no animal...\n");
        }
        memset(buf,'\0',sizeof(buf));//每执行一次，清零数组
    }

}
